package cn.wps.moffice.main.local.filebrowser.dao;

import cn.wps.moffice.framework.thread.KThread;
import cn.wps.moffice.main.common.PersistentPublicKeys;
import cn.wps.moffice.main.common.PublicConst;
import cn.wps.moffice.main.framework.datastorage.PersistentsMgr;
import cn.wps.moffice.main.local.filebrowser.BrowserTypeID;
import cn.wps.moffice.main.local.filebrowser.operator.actiontrace.ActionTrace;
import cn.wps.moffice.persistence.model.AppSettings;

/**
 * Browser 存储层.
 * 
 * 封装框架提供的 PersistentsMgr 进行 Model 和 常量的存储. 
 * @author wangxiaohua
 *
 */
public class Sear
{	
	public static String BROWSER_TRACE_TAG = BrowserTypeID.class.getName();
	
	/** 存储 所有文档 制定类型 搜索文件列表.
	 * 
	 * @param index {@link cn.wps.moffice.main.local.filebrowser.dao.Sear.PersistentPublicKeys}
	 * @param files {@link java.util.ArrayList<FileItem> }
	 */
	public static void saveAllCacheList(final DirFileCacheModel files) {
		if (null != files) {
			KThread.threadExecute(new Runnable() {  //thread
				public void run() {
					PersistentsMgr.get().putModel(PublicConst.SP_ALLDOC_CACHE_FILE_SEAR_NAME_V2,  PublicConst.SP_KEY_CACHE_DIR_FILES, files);
				}
			});
		}
	}
		
	public static DirFileCacheModel getAllCacheFileList() {
		return PersistentsMgr.get().getModel(PublicConst.SP_ALLDOC_CACHE_FILE_SEAR_NAME_V2, PublicConst.SP_KEY_CACHE_DIR_FILES);
	}
	
	public static void clearOldAllCacheFileList() {
		KThread.threadExecute(new Runnable() {

			@SuppressWarnings("deprecation")
			@Override
			public void run() {
				try {
					PersistentsMgr.get().removeModel(PublicConst.SP_ALLDOC_CACHE_FILE_SEAR_NAME, PublicConst.SP_KEY_CACHE_DIR_FILES);
				} catch (Exception e) {
				}
			}
		});
	}

	/** 
	 * 存储 所有文档 当前选择类型索引 index.
	 * @param index
	 */
	public static void saveLastDocType(int index)
	{
		PersistentsMgr.get().putInt(PersistentPublicKeys.ALLDOC_LAST_SELECTED_TYPE, index);
	}
	
	/**
	 * 获取 所有文档 当前选择类型索引 index.
	 * @return
	 */
	public static int getLastDocType()
	{
		return PersistentsMgr.get().getInt(PersistentPublicKeys.ALLDOC_LAST_SELECTED_TYPE, AppSettings.SEARCH_ALL);
	}
		
	/**
	 * 存储 导航路径.
	 * @param browserTypeId {@link cn.wps.moffice.main.local.filebrowser.BrowserTypeId}
	 * @param actionTrace {@link cn.wps.moffice.main.local.filebrowser.operator.actiontrace.ActionTrace<String>}
	 */
	public static void saveActionTrace(final int browserTypeId, final ActionTrace<String> actionTrace)
	{
		KThread.threadExecute(new Runnable()
		{
			public void run() 
			{
				PersistentsMgr.get().putModel(PublicConst.SP_BROWSER_ACTION_TRACE_NAME,  BROWSER_TRACE_TAG + browserTypeId, actionTrace);
			}
		});
	}
	
	public static void saveActionTraceDirectly(final int browserTypeId, final ActionTrace<String> actionTrace)
	{
		PersistentsMgr.get().putModel(PublicConst.SP_BROWSER_ACTION_TRACE_NAME,  BROWSER_TRACE_TAG + browserTypeId, actionTrace);
	} 
	
	/** 
	 * 获取 多种形式浏览器 的导航路径.
	 * @param browserTypeId {@link cn.wps.moffice.main.local.filebrowser.BrowserTypeId}
	 * @return
	 */
	public static ActionTrace<String> getActionTrace(int browserTypeId){
    	return PersistentsMgr.get().getModel(PublicConst.SP_BROWSER_ACTION_TRACE_NAME, BROWSER_TRACE_TAG + browserTypeId);
	}
		
	/**
	 * 获取 所有文档 本地目录 列表排序方式.
	 * @return
	 */
	public static int getSortFlag()
	{
		return PersistentsMgr.get().getInt(PersistentPublicKeys.BROWSER_SORT_NAME, AppSettings.SORT_FILENAME);
	}
	
	/**
	 * 存储 所有文档 本地目录 列表排序方式.
	 * @param sortType {@link cn.wps.moffice.persistence.model.AppSettings}
	 * @return
	 */
	public static void saveSortFlag(int sortType)
	{
		PersistentsMgr.get().putInt(PersistentPublicKeys.BROWSER_SORT_NAME, sortType);
	}
}
